package com.bestcem.xm.om.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.om.entity.OmPrincipal;
import com.bestcem.xm.om.grpc.v1.services.Principal;
import com.bestcem.xm.om.service.dto.RelationDTO;
import com.bestcem.xm.om.service.dto.common.PageDTO;
import com.bestcem.xm.om.service.dto.principal.OmPrincipalDTO;

import java.util.List;
import java.util.Set;

/**
 * 描述信息
 *
 * @author xuan.yang <xuan.yang@idiaoyan.com>
 * @version v1.0
 * @date 2021/12/29 17:00
 */
public interface OmPrincipalService {
    /**
     * 根据公司id获取负责人和关联人
     *
     * @param orgId
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/29 17:10
     */
    ServiceResult<RelationDTO> getOrgRelatedOp(String orgId);
    /**
     * 根据公司id列表获取负责人和关联人
     *
     * @param orgIds
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/29 17:10
     */
    List<RelationDTO> getOrgRelatedOp(List<String> orgIds);

    /**
     * 根据负责人姓名获取公司id
     *
     * @param name
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/29 18:04
     */
    ServiceResult<List<String>> listIdsByName(String name);

    /**
     * 创建负责人和关联人
     *
     * @param orgId
     * @param principalOp
     * @param relates
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/29 18:15
     */
    ServiceResult<Void> createOrgRelatedOp(String orgId, String principalOp, List<String> relates);

    /**
     * 更新创建人和关联人
     *
     * @param orgId
     * @param principalOp
     * @param relates
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/30 10:46
     */
    ServiceResult<Void> updateOrgRelatedOp(String orgId, String principalOp, List<String> relates);

    /**
     * 根据实体类的条件查询列表
     *
     * @param principal
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/31 11:03
     */
    ServiceResult<List<com.bestcem.xm.om.grpc.v1.services.OmPrincipal>> listOmPrincipals(OmPrincipal principal);

    /**
     * pageByOrgIds
     * @param orgIds
     * @param currentPage
     * @param size
     * @return
     */
    PageDTO<Principal> pageByOrgIds(Set<String> orgIds, Integer currentPage, Integer size);

    /**
     * 根据orgId查询负责人和关联人集合
     * @param orgId
     * @return
     */
    ServiceResult<OmPrincipalDTO> listOmPrincipalsByOrgId(String orgId);
}
